package cn.springdate;

import cn.bdqn.dao.CustomerDao;
import cn.bdqn.entity.Customer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

//声明这个类是spring的测试类  告诉这个类spring里面所有的东西都可以使用
@RunWith(SpringJUnit4ClassRunner.class)
//加载配置文件    classpath:根目录
@ContextConfiguration(locations = "classpath:applicationContext.xml")

public class Demo {

    @Autowired
    private CustomerDao customerDao;
    Customer c = new Customer();

    //保存客户数据到数据库
    @Test
    public void testSave(){

        c.setCustName("hello,spring jpa insert");
        c.setCustAddress("广州天河美滋滋");
        customerDao.save(c);

    }

    //修改id 为3的客户数据

    /**
     * save：可同时更新或插入
     * 如果传入的对象没有这个id，则执行插入
     * 如果传入的对象有这个id，则执行更新
     */
    @Test
    public void testEdit(){
        //现获取客户id为3的客户数据
        c = customerDao.findOne(3L);
        System.out.println("=====================================");
        c.setCustName("已经修改");
        //执行更新之前会查询数据库，如果查询的数据和更新的数据一模一样，则不执行更新操作
        customerDao.save(c);
    }

    //根据id删除
    @Test
    public void testdelete(){
        customerDao.delete(5L);
    }

    //根据id查询数据
    @Test
    public void findById(){
        c = customerDao.findOne(1L);
        //List<Customer> c = customerDao.findAll();
        System.out.println(c.getCustName());
    }


    //使用spring=date-jpa实现延迟加载
    @Test
    @Transactional      //事务可以防止延迟加载的时候报错(必须使用)
    public void getById(){
        Customer c = customerDao.getOne(2L);
        System.out.println("=========================================");
    }










}
